# import logging
# logger = logging.getLogger(__name__)
# logger.setLevel(level=logging.INFO)
# handler = logging.FileHandler('output.log')
# format = logging.Formatter(
#     '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# handler.setFormatter(format)
# logger.addHandler(handler)

# logger.info('This is a log info')
# logger.debug('Debugging')
# logger.warning('Waring exists')
# logger.info('Finish'+'\n')

# logging 模块提供的 Handler 有：
# StreamHandler：logging.StreamHandler；日志输出到流，可以是 sys.stderr，sys.stdout 或者文件。
# FileHandler：logging.FileHandler；日志输出到文件。
# BaseRotatingHandler：logging.handlers.BaseRotatingHandler；基本的日志回滚方式。
# RotatingHandler：logging.handlers.RotatingHandler；日志回滚方式，支持日志文件最大数量和日志文件回滚。
# TimeRotatingHandler：logging.handlers.TimeRotatingHandler；日志回滚方式，在一定时间区域内回滚日志文件。
# SocketHandler：logging.handlers.SocketHandler；远程输出日志到 TCP/IP sockets。
# DatagramHandler：logging.handlers.DatagramHandler；远程输出日志到 UDP sockets。
# SMTPHandler：logging.handlers.SMTPHandler；远程输出日志到邮件地址。
# SysLogHandler：logging.handlers.SysLogHandler；日志输出到 syslog。
# NTEventLogHandler：logging.handlers.NTEventLogHandler；远程输出日志到 Windows NT/2000/XP 的事件日志。
# MemoryHandler：logging.handlers.MemoryHandler；日志输出到内存中的指定 buffer。
# HTTPHandler：logging.handlers.HTTPHandler；通过”GET” 或者”POST” 远程输出到 HTTP 服务器。

# 下面使用三个 Handler 来实现日志同时输出到控制台、文件、HTTP 服务器：（运行之前我们需要先启动 HTTP Server，并运行在 8001 端口，其中 log 接口是用来接收日志的接口。）
import logging
from logging.handlers import HTTPHandler
import sys

logger = logging.getLogger(__name__)
logger.setLevel(level=logging.DEBUG)

# StreamHandler
stream_handler = logging.StreamHandler(sys.stdout)
stream_handler.setLevel(level=logging.DEBUG)
formatter = logging.Formatter(
    '%(asctime)s - %(levelname)s - %(message)s')
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)

# FileHandler
file_handler = logging.FileHandler('output.log')
file_handler.setLevel(level=logging.INFO)
formatter = logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

# HTTPHandler
http_handler = HTTPHandler(host='localhost:8001', url='log', method='POST')
logger.addHandler(http_handler)

# Log
logger.info('This is a log info')
logger.debug('Debugging')
logger.warning('Warning exists')
logger.info('Finish'+'\n')

# # Formatter 用法
# logger = logging.getLogger(__name__)
# logger.setLevel(level=logging.WARN)
# # 指定了一个 Formatter，并传入了 fmt 和 datefmt 参数，这样就指定了日志结果的输出格式和时间格式，然后 handler 通过 setFormatter () 方法设置此 Formatter 对象即可
# formatter = logging.Formatter(
#     fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y/%m/%d %H:%M:%S')
# handler = logging.StreamHandler()
# handler.setFormatter(formatter)
# logger.addHandler(handler)
# # Log
# logger.debug('Debugging')
# logger.critical('Critical Something')
# logger.error('Error Occurred')
# logger.warning('Warning exists')
# logger.info('Finished')
